iT邦幫忙

2024 iThome 鐵人賽

DAY 20
0
Security

HTB_Headless系列 第 20

[問答07]HTB_Headless

  • 分享至 

  • xImage
  •  

HTB練習紀錄 — Payload

  • 如何判斷 initdb.sh 可能是弱點?

回答[Day 11]


[Day 11]HTB_Headless(Reverse Shell_03)

Q2: 如何判斷可以嘗試對initdb.sh 進行攻擊的?

A: syscheck執行的initdb.sh並非絕對路徑。透過建立新的initdb.sh使syscheck讀取到錯誤的initdb.sh

if ! /usr/bin/pgrep -x "initdb.sh" &>/dev/null; then
  /usr/bin/echo "Database service is not running. Starting it..."
  ./initdb.sh 2>/dev/null
else
  /usr/bin/echo "Database service is running."
fi

exit 0

嘗試分解問題

  • 執行syscheck必定會呼叫initdb.sh,有問題嗎?
  • 資安漏洞是出現在哪呢?

執行syscheck必定會呼叫initdb.sh,有問題嗎?

這邊請GPT舉個例子

情境:自動化數據庫服務啟動

ChatGPT
假設在一個 Linux 系統上運行一個應用程序,它需要在啟動時確認數據庫服務是否正在運行。如果數據庫服務沒有運行,則腳本會啟動數據庫初始化腳本 initdb.sh。這樣可以確保數據庫在應用程序啟動之前是準備好的

具體情境示例

目前有一個名為 app_startup.sh 的啟動腳本,這個腳本在每次啟動應用程序之前會檢查數據庫服務是否已經啟動。如果數據庫服務未啟動,腳本會啟動數據庫初始化腳本 initdb.sh 來初始化數據庫。這樣可以確保應用程序在啟動時能夠正常連接到數據庫。

#!/bin/bash

# 檢查 initdb.sh 是否正在運行
if ! /usr/bin/pgrep -x "initdb.sh" &>/dev/null; then
  /usr/bin/echo "Database service is not running. Starting it..."
  # 啟動數據庫初始化腳本
  ./initdb.sh 2>/dev/null
else
  /usr/bin/echo "Database service is running."
fi

# 啟動應用程序
/usr/bin/echo "Starting application..."
# 替換下面的命令為實際啟動應用程序的命令
./start_application.sh

exit 0

使用情境

  • 數據庫初始化 :在系統啟動或應用程序啟動之前,需要確保數據庫初始化腳本 initdb.sh 只有在數據庫未運行的情況下才會被執行。
  • 自動化啟動 :自動化數據庫啟動過程,避免手動檢查數據庫服務狀態並啟動服務。

這段程式碼在確保系統和應用程序可以正常啟動和運行時非常有用,特別是在生產環境中,自動化和確保服務正常運行是非常重要的。

結論

根據ChatGPT可知,執行syscheck必定會呼叫initdb.sh本身沒問題,這確保系統和應用程序可以正常啟動和運行

有希震驚


資安漏洞是出現在哪呢?

注意下方程式碼,這是執行initdb.sh的關鍵。可以發現路徑是 ./,有請GPT簡單介紹

  ./initdb.sh 2>/dev/null

ChatGPT

./ 的作用

  1. 指定當前目錄
    ./ 用於指示當前工作目錄。當你在命令行中使用 ./ 來執行某個文件時,你是在告訴系統這個文件位於當前目錄下。例如:
./script.sh

(這條命令告訴系統去當前目錄查找並執行名為 script.sh 的腳本。)

  1. 執行當前目錄中的程序
    在 Unix-like 系統中,當你執行一個程序或腳本時,系統會在環境變數 PATH 指定的目錄中尋找該程序。使用 ./ 明確指定當前目錄可以讓系統找到不在 PATH 中的程序。例如:
./my_program

(如果 my_program 在當前目錄下,這條命令會執行它,即使它不在系統的 PATH 中。)

./常見誤區

  1. 文件不存在
    如果使用 ./ 執行的文件不存在或不可執行,系統會返回錯誤。例如:
./non_existent_file

(如果 non_existent_file 不存在,會顯示「沒有此檔案或目錄」的錯誤信息。)

  1. 沒有執行權限
    如果文件沒有執行權限,使用 ./ 執行時會顯示「權限被拒絕」的錯誤信息。可以使用 chmod 命令添加執行權限:
chmod +x ./file.sh

我的觀點
剛剛結論有提到,執行syscheck必定會呼叫initdb.sh可以確保系統和應用程序可以正常啟動和運行。但是有個前提,initdb.sh必須是事前寫好,儲存在固定檔案路徑的指令檔案。

舉個例子

今天爺爺告知大家自己有立一份遺囑(initdb.sh)放在家中(./initdb.sh),但是直到過世都沒告訴任何人遺囑的具體位置。
現在有繼承人立了一份假遺囑(攻擊者建立的initdb.sh),並告知所有人是在家中找到的遺囑,在找不到其他遺囑(攻擊者建立的initdb.sh)的情況下,遺囑就這麼替換掉了。
有希偷襲嘿嘿,來、騙、偷襲


上一篇
[問答06]HTB_Headless
下一篇
[雜談]給打算入坑資安的你/妳
系列文
HTB_Headless30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言